library(tidyverse)
library(here)
library(cluster)
library(plotly)
library(ggdendro)
library(knitr)
library(scales)
library(ggbeeswarm)
library(broom)

theme_set(theme_bw())
source(here::here("code/lib.R"))
knitr::opts_chunk$set(tidy = FALSE,
                      fig.width = 6,
                      fig.height = 5,
                      echo = TRUE)

paleta = c("#404E4D",
           "#92DCE5",
           "#938BA1",
           "#2D3142",
           "#F4743B")
dados <- read_csv("/home/marianamendes/natalie_portman/data/natalie.csv")
## Parsed with column specification:
## cols(
##   filme = col_character(),
##   bilheteria = col_double()
## )
import_data("natalie_portman")
## Loading required package: rvest
## Loading required package: xml2
## 
## Attaching package: 'rvest'
## The following object is masked from 'package:purrr':
## 
##     pluck
## The following object is masked from 'package:readr':
## 
##     guess_encoding
## Warning in rlang::eval_tidy(~as.numeric(gsub("[$|M]", "", BOXOFFICE)),
## <environment>): NAs introduced by coercion
filmes = read_imported_data()
filmes_total <- merge(filmes, dados, by.x="filme", by.y="filme")

A atriz escolhida foi Natalie Portman, uma atriz israelense, que nasceu no dia 9 de junho em 1981 (37 anos). Natalie começou a carreira muito cedo, aos 11 anos, quando atuou em The Professional no ano de 1994. Até seus 15 anos já havia participado de 5 filmes.

include_graphics('/home/marianamendes/natalie_portman/data/natalie_1996.jpg')

Até 1996 todos os filmes em que ela atuou possuem uma avaliação superior a 50 no RottenTomatoes, contudo com uma bilheteria não tão alta. Depois de Beautiful Girls passou cerca de 3 anos fora das telas para voltar com tudo participando de uma das sagas mais queridas do mundo.

filmes_total %>% filter(ano < 1997) %>% ggplot(aes(x=filme, y=avaliacao)) + 
  geom_point(size=5) + 
  geom_segment(aes(x=filme, 
                   xend=filme, 
                   y=0, 
                   yend=avaliacao)) + 
  labs(title="Natalie Portman até 1996", 
       subtitle="Avaliações pelo rotten tomatoes", 
       caption="source: mpg") + 
  theme(axis.text.x = element_text(angle=50,hjust = 0.8, vjust=0.8))

Aqui estão representados os primeiros anos de Natalie no cinema, sendo The Professional o primeiríssimo filme, sua avaliação não é tão alta em relação aos outros e a bilheteira não foi lá muito alta também, mas Natalie conseguiu marcar com a interpretação da pequena Mathilda.

include_graphics('/home/marianamendes/natalie_portman/data/mathilda.gif')

Star Wars e Natalie Portman - 1999!

Em 1999, quando tinha seus 18 anos, iniciou sua participação na saga Star Wars onde interpretou Padmé Amidala. O episódio I, The Phanton Menace, foi um sucesso de bilheteria, arrecadando mais de 800 milhões. Os outros dois episódios também foram bem recebidos pelo público, ambos com mais de 400 milhões nas bilheterias :). A saga foi de extrema importância para a jovem atriz, visto que foram os filmes que mais fizeram sucesso no cinema em toda sua carreira até agora.

p <- filmes_total %>% count(avaliacao, bilheteria.y, ano, filme) %>% plot_ly(
  x = ~ano,
  y = ~bilheteria.y,
  color = ~avaliacao,
  text = ~filme,
  type = "bar"
) 

ggplotly(p)
## Warning: textfont.color doesn't (yet) support data arrays

## Warning: textfont.color doesn't (yet) support data arrays

A partir desse gráficos conseguimos ver (ao passar o mouse em cima das barras), que os filmes da saga Star Wars são outliers em relação às bilheterias, apesar de não terem sido tão bem avaliados no rotten tomatoes. É possível ver também que no intervalo de 2002 a 2011, todos os anos ela participou em pelo menos um, dentre eles, os mais bem avaliados (em amarelo) Garden State e o famoso Black Swan.
Em Black Swan, Natalie interpretou a bailarina Nina Sayers, precisou emagrecer 10 kilos para as gravações, além de ter sofrido alguns acidentes durante as cenas e treinamentos, contudo parece que o esforço rendeu algo, a atriz ganhou, em 2011, o oscar de melhor atriz principal pelo papel.

include_graphics('/home/marianamendes/natalie_portman/data/bswan.gif')

Através dos anos…

anos <- filmes_total %>% group_by(ano) %>% summarise(count=n(), media=mean(avaliacao), media_bi=mean(bilheteria.y))


ggplot(anos, aes(x=ano)) + 
  geom_line(aes(y=media)) + 
  labs(title="Avaliações no através dos anos", 
       subtitle="Avaliações de filmes no rotten tomatoes", 
       y="Avaliação") +  # title and caption
  theme(axis.text.x = element_text(angle = 90, vjust=0.5),  # rotate x axis text
        panel.grid.minor = element_blank())  # turn off minor grid

Aqui temos uma representação rápida das avaliações do Rotten Tomatoes através dos anos.

Tipos de filmes

Agora vamos descobrir os tipos de filme de Natalie Portman. Tentaremos agrupá-los com seus semelhantes de acordo com algumas características. No gráfico abaixo, temos esse agrupamento usando apenas a variável bilheteria.

p = filmes_total %>% 
    ggplot(aes(x = "filmes", y = bilheteria.y, label = filme)) + 
    geom_jitter(width = .05, alpha = .3, size = 3) + 
    labs(x = "")

ggplotly(p)

Usando bilheteria para analisar, é possível observar 4 ou 3 grupos definidos… Iremos ver isso melhor mais adiante.

m_transformado = filmes_total %>% 
    mutate(b = log10(bilheteria.y))
summary(m_transformado %>% select(bilheteria.y, b))
##   bilheteria.y             b        
##  Min.   :      291   Min.   :2.464  
##  1st Qu.:  1143825   1st Qu.:6.057  
##  Median : 33663600   Median :7.527  
##  Mean   : 97615157   Mean   :6.602  
##  3rd Qu.: 92994200   3rd Qu.:7.967  
##  Max.   :813711800   Max.   :8.910

Agora utilizando as duas variáveis disponíveis, avaliação e bilheteria, vamos observar como os filmes se dividem melhor, em quantos grupos.

n_clusters = 3

km = m_transformado %>% 
    select(b, avaliacao) %>% 
    kmeans(centers = n_clusters, nstart = 20)

agrupado = km %>% 
    augment(m_transformado)
m_transformado = filmes_total %>% 
    mutate(bilh_scaled = as.vector(scale(log10(bilheteria.y))), 
           av_scaled = as.vector(scale(avaliacao))) 


agrupa_bilh_avaliacao<- function(df, k){
    df %>% 
        select(bilh_scaled, av_scaled) %>%
        kmeans(centers = k, 
               nstart = 20) %>% 
        augment(df) %>% 
        mutate(.cluster = as.character(.cluster))
}

agrupamentos = tibble(k = 1:6) %>% 
    mutate(agrupamento = map(k, ~ agrupa_bilh_avaliacao(m_transformado, .))) %>% 
    unnest(agrupamento)
 
agrupamentos %>%
    ggplot(aes(
        x = avaliacao,
        y = bilheteria.y,
        label = filme,
        colour = .cluster
    )) +
    geom_point(size = 2, alpha = .8) +
    facet_wrap( ~ k) +
    scale_y_log10()

Vendo as 6 representações acima é notável que utilizando 3 clusters, grupos, os filmes ficam mais bem definidos, ou seja “mais pertecentes” a um determinado conjunto de outros filmes. Agora vamos melhorar a representação usando 3 grupos.

km = m_transformado %>%
    select(bilh_scaled, av_scaled) %>%
    kmeans(centers = n_clusters, nstart = 20)

agrupado = km %>% 
    augment(m_transformado)

agrupado %>%
    ggplot(aes(x = av_scaled, y = bilh_scaled, color = .cluster))  +
    geom_point(size = 2) 

p = agrupado %>%
    ggplot(aes(x = avaliacao, y = bilheteria.y, color = .cluster, label = filme))  +
    geom_point(size = 2) +
    scale_y_log10() 

ggplotly(p)

Pronto. Usando esse gráfico podemos observar também qual pontinho representa que filme, basta colocar o mouse em cima… Agora vamos analisar.

Annihilation :D

Eating Animals :)

Mars Attacks! :|

Free Zone :(